foreach ($_COOKIE as $key => $value) {
$cookies[] = "$key=$value";
}
$cookies = implode('; ', $cookies);
$curl_handle = curl_init("url");
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_handle, CURLOPT_COOKIESESSION, true);
curl_setopt($curl_handle, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl_handle, CURLOPT_COOKIE, $cookies);
$result = curl_exec($curl_handle);
curl_close($curl_handle);
die($result);
אני מנסה להציג למשתמש עמוד אחר מהאתר שלי.
התוכן של העמוד תלוי בעוגיות של המשתמש, לכן אני גם שולח את כל העוגיות של המשתמש עם ה-request.
משום מה, הדף נטען במשך 10-15 שניות ומחזיר שגיאה 500...
למה זה קורה ואיפה טעיתי כאן.
חשוב לציין שזו הפעם הראשונה שאני מתעסק עם curl...
תודה.
11 תשובות
include לא בא בחשבון במקרה הזה.
בעמוד שאני רוצה להציג יש require לעמודים שכבר עשיתי להם require וזה ייצור בלגן.
בקיצור, לא Include.
לפני זה השתמשתי ב-file_get_contents והעברתי דרך ה-get את העוגיות מוצפנות והצלחתי לעבוד איתן דרך ה-get.
אבל דרך ה-curl זה נקי יותר.
curl הרבה יותר איטית והרבה יותר משאבים.
עדיף לך להעתיק את הדף ולא להשתמש ב CURL לקקבצים בתוך השרת.
זה דף שמשתנה, אני לא יכול להעתיק אותו.
מה שמסבך עוד יותר, זה שמדובר בכמה דפים, כשכל פעם אני מציג דף אחר.
אז במקום לבנות את המערכת אתה בונה קביים עקומות ?
בכל אופן למה לא עובד לך אני לא יודע. שגיאה 500 אפשר לבדוק בלוגים, כנראה טיימאות.
תוודא שה url נכון.
שנית, קוקי מופרדים בנקודה פסיק בלי רווח ביניהם, ול value יש לעשות urlencode
לא הבנתי איך קשור מה שאני מבקש למערכת. זה הכרחי.
בנוסף, ציטוט מ-php.net:
ככה שדווקא צריך את הרווח.
ואני גם לא יודע למה יש שגיאה 500, בלוגים לא מופיע משהו מיוחד.
וגם אם זה טיימאאוט, זה לא אמור לקרות.
*כשהעברתי את הקוד לדף אחר הוא עבד.
אם הגעת לבעיה כזאת אתה צריך לחשוב אם אתה מתכנן את הקוד שלך נכון.
בכל מקרה תעבור להשתמש בinclude_once ו require_once
הקוד מתוכנן נכון, בוא אני אסביר לך איך אני עובד.
יש לי תיקייה classes שבה יש קבצים עם מחלקות שונות.
אחת מהמחלקות נקראת redirect, דרכה אני מעביר ממשתמש לעמוד אחר/לעמוד שגיאה.
לדוגמה אם אני מעוניין שהמשתמש יראה דף 404, במחלקה יש מתודה שמטלת בזה.
זו המתודה:
200 => 'OK',
301 => 'Moved Permanently',
403 => 'Forbidden',
404 => 'Not Found',
500 => 'Internal Server Error'
);
if (isset($header[$errorNumber]))
header("HTTP/1.1 $errorNumber $header[$errorNumber]");
$cookies = array();
foreach ($_COOKIE as $key => $value) {
$cookies[] = "$key=$value";
}
$cookies = implode('; ', $cookies);
$ch = curl_init("http://web-school.co.il/error/404.php");
curl_setopt($ch, CURLOPT_COOKIE,$cookies);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
die($result);
errorNumber$ זה מספר השגיאה שאליה אני מעביר את המשתמש.
עכשיו הבעיה היא שכשאני מפעיל את המתודה הזו זה טוען לי את העמוד 10 שניות בערך ושולח אותי לשגיאה 500.
אם אני לא שולח את העוגיות, כלומר אם אני מוחק את השורה:
זה עובד.
הבעיה היא שאני חייב להעביר את העוגיות.
למה אתה עושה ככה ולא שולח הדר של הפניה?
header("Location: {$PATH}/{$errorNumber}.html");
המטרה היא להציג למשתמש שגיאה 404.
שזה ייראה כאילו העמוד באמת לא קיים.
כשהמשתמש רואה שהוא מועבר לעמוד 404 הוא מבין שהעמוד אליו הוא מנסה להגיע באמת קיים, אבל העבירו אותו.
אם הוא רואה 404 ללא העברה, זה נראה כאילו העמוד באמת לא קיים.